// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const { voteId, optionIndex } = event

  if (!voteId) {
    return {
      success: false,
      message: '投票ID不能为空'
    }
  }

  if (optionIndex === undefined || optionIndex < 0) {
    return {
      success: false,
      message: '请选择有效的投票选项'
    }
  }

  try {
    // 检查投票活动是否存在
    const voteResult = await db.collection('vote_activity')
      .doc(voteId)
      .get()

    if (!voteResult.data) {
      return {
        success: false,
        message: '投票活动不存在'
      }
    }

    const voteInfo = voteResult.data

    // 检查投票是否已结束
    if (voteInfo.endTime && new Date() > new Date(voteInfo.endTime)) {
      return {
        success: false,
        message: '投票已结束'
      }
    }

    // 检查选项索引是否有效
    if (optionIndex >= voteInfo.options.length) {
      return {
        success: false,
        message: '选项索引无效'
      }
    }

    // 检查用户是否已投票（防重复投票）
    const existingVoteResult = await db.collection('vote_record')
      .where({
        _voteId: voteId,
        openid: wxContext.OPENID
      })
      .get()

    if (existingVoteResult.data && existingVoteResult.data.length > 0) {
      return {
        success: false,
        message: '您已经投过票了，不能重复投票'
      }
    }

    // 添加投票记录
    const addResult = await db.collection('vote_record').add({
      data: {
        _voteId: voteId,
        openid: wxContext.OPENID,
        option: optionIndex,
        timestamp: new Date(),
        _createTime: new Date()
      }
    })

    if (!addResult._id) {
      return {
        success: false,
        message: '投票记录保存失败'
      }
    }

    return {
      success: true,
      message: '投票成功',
      data: {
        recordId: addResult._id,
        voteId: voteId,
        optionIndex: optionIndex
      }
    }

  } catch (error) {
    console.error('提交投票失败:', error)
    return {
      success: false,
      message: '提交投票失败',
      error: error.message
    }
  }
}